package com.fhao.spring.selfblog.utils;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.util.UUID;

public class SecurityUtils {
    /**
     * 对密码进行加密
     * @param password
     * @return
     */
    public static String encrypt(String password) {
        //盐值: 每次生成内容不同,但长度固定为 32 位
        String salt = UUID.randomUUID().toString().replace("-", "");
        //最终密码=md5(盐值+原始密码) 32 位
        String finalPassword = DigestUtils.md5DigestAsHex((salt+password).getBytes());
        return salt+finalPassword;
    }

    /**
     *
     * @param password 待验证密码
     * @param finalPassword 最终正确的密码(数据库中加盐的密码)
     * @return
     */
    public static boolean verify(String password,String finalPassword) {
        //非空校验
        if(!StringUtils.hasLength(password)
                || !StringUtils.hasLength(finalPassword)) {
            return false;
        }
        //最终密码一定是64位,如果不是则返回false
        if(finalPassword.length() < 64) {
            return false;
        }
        //最终密码的前32位是盐值
        String salt = finalPassword.substring(0,32);
        //使用盐值+password生成一个待确认密码
        String verifyPassword = DigestUtils.md5DigestAsHex((salt+password).getBytes());
        //salt+待确认密码和最终密码进行比较
        return (salt+verifyPassword).equals(finalPassword);
    }

    public static void main(String[] args) {
//        String salt = UUID.randomUUID().toString().replace("-", "");
//        System.out.println(salt);
//        String finalPassword = DigestUtils.md5DigestAsHex((salt+"1452djiew.").getBytes());
        String finalPassword = encrypt("123456");
        System.out.println(finalPassword);
        System.out.println(verify("1452djiew",finalPassword));
    }
}























